package com.dkd.manage.service.impl;

import cn.hutool.core.collection.CollectionUtil;
import com.dkd.common.exception.ServiceException;
import com.dkd.common.utils.DateUtils;
import com.dkd.manage.domain.Channel;
import com.dkd.manage.domain.Sku;
import com.dkd.manage.mapper.ChannelMapper;
import com.dkd.manage.mapper.SkuMapper;
import com.dkd.manage.service.ISkuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * 商品管理Service业务层处理
 *
 * @author xiaoyu
 * @date 2025-08-11
 */
@Service
public class SkuServiceImpl implements ISkuService {

    @Autowired
    private SkuMapper skuMapper;

    @Autowired
    private ChannelMapper channelMapper;

    /**
     * 查询商品管理
     *
     * @param skuId 商品管理主键
     * @return 商品管理
     */
    @Override
    public Sku selectSkuBySkuId(Long skuId) {
        return skuMapper.selectSkuBySkuId(skuId);
    }

    /**
     * 查询商品管理列表
     *
     * @param sku 商品管理
     * @return 商品管理
     */
    @Override
    public List<Sku> selectSkuList(Sku sku) {
        return skuMapper.selectSkuList(sku);
    }

    /**
     * 新增商品管理
     *
     * @param sku 商品管理
     * @return 结果
     */
    @Override
    public int insertSku(Sku sku) {
        sku.setCreateTime(DateUtils.getNowDate());
        return skuMapper.insertSku(sku);
    }

    /**
     * 修改商品管理
     *
     * @param sku 商品管理
     * @return 结果
     */
    @Override
    public int updateSku(Sku sku) {
        sku.setUpdateTime(DateUtils.getNowDate());
        return skuMapper.updateSku(sku);
    }

    /**
     * 批量删除商品管理
     *
     * @param skuIds 需要删除的商品管理主键
     * @return 结果
     */
    @Override
    public int deleteSkuBySkuIds(Long[] skuIds) {
        // 1. 查询该商品下是否有关联货道如果有不允许删除抛出异常
        List<Channel> channelList = channelMapper.selectChannelBySkuIds(Arrays.asList(skuIds));
        if (CollectionUtil.isNotEmpty(channelList)) {
            throw new ServiceException("该商品下有关联货道，请先删除关联货道");
        }
        return skuMapper.deleteSkuBySkuIds(skuIds);
    }

    /**
     * 删除商品管理信息
     *
     * @param skuId 商品管理主键
     * @return 结果
     */
    @Override
    public int deleteSkuBySkuId(Long skuId) {
        // 如果该商品id存在货道则不允许删除
        List<Channel> channelList = channelMapper.selectChannelBySkuIds(Collections.singletonList(skuId));
        if (CollectionUtil.isNotEmpty(channelList)) {
            throw new ServiceException("该商品下有关联货道，请先删除关联货道");
        }
        return skuMapper.deleteSkuBySkuId(skuId);
    }

    /**
     * 批量插入商品信息
     *
     * @param skuList 商品信息集合
     */
    @Override
    public int insertBatchSku(List<Sku> skuList) {
        return skuMapper.insertBatchSku(skuList);
    }
}
